/** 表单引擎类型定义文件 */

enum LabelPosition {
  LEFT = 'left',
  RIGHT = 'right',
  TOP = 'top'
}

/** 表单控件大小 */
enum FormSize {
  LARGE = 'large',
  DEFAULT = 'default',
  SMALL = 'small' 
}

/** 表单配置 */
export type FormSchema = {
  /** 表单标识 */
  formId?: string;
  /** 布局方式 */
  inline?: boolean;
  /** 表单控件大小 */
  size?: FormSize;
  /** label宽度 */
  labelWidth?: number;
  /** label对齐方式 */
  labelPosition?: LabelPosition;
  /** 表单元素 */
  items: Array<FormItem>;
  /** 校验规则 */
  rules?: RuleItem[];
}
/** 表单项 */
export type FormItem = {
  /** 类型 */
  type: string;
  /** 字段名 */
  field: string;
  /** label文字 */
  label?: string;
  /** 默认值 */
  defaultValue?: any;
  /** 占位文本 */
  placeholder?: string;
  /** 控件props */
  props?: Record<string, any>;
  /** 是否可见 */
  visible?: boolean | ((formData: any) => boolean);
  /** 栅格布局 */
  colSpan?: number;
  /** 校验规则 */
  rules?: RuleItem[];
}
/** 校验表单 */
interface RuleItem {
  /** 是否必须 */
  required?: boolean;
  /** 错误提示 */
  message?: string;
  /** 校验规则 */
  validator?: (value: any, formData: any) => Promise<boolean> | boolean;
  /** 正则校验 */
  pattern?: RegExp;
  /** 触发方式 */
  trigger?: 'change' | 'blur';
}